﻿#pragma once
#ifndef MYPDU_H
#define MYPDU_H
#include <stdlib.h>
#include <memory.h>
#include <QString>
//此.h和.cpp主要包含自定义协议的定义和封装
enum TYPE {     //消息类型
    TEXT_MSG = 0,                   //客户端发送了文本消息
    SEARCH_USER,                    //搜索用户
    ADD_FRIEND,                     //客户端添加好友
    ADD_FRIEND_S,                   //添加好友成功
    ADD_FRIEND_F,                   //添加好友失败
    LOG_IN,                         //客户端登陆
    LOG_IN_F,                       //登陆失败
    LOG_IN_S,                       //登陆成功
    RES,                            //客户端注册
    RES_S,                          //注册成功
    RES_F,                          //注册失败
    DESTROY,                        //客户注销消息
    DESTROY_S,                      //客户注销成功
    ONLINE,                         //有人上线
    OFFLINE,                        //有人下线
    FILE_REQUEST,                   //发送文件请求
    FILE_RESPOND_AGREE,             //对方同意接收文件
    FILE_RESPOND_REFUSE,            //对方拒绝接收文件
    SECURE_REQUEST,                 //密保安全问题询问请求
    SECURE_RESPOND_S,               //安全问题正确
    SECURE_RESPOND_F,               //安全问题错误
    RESET_PWD,                      //重置密码请求
    RESET_PWD_S,                    //重置密码成功
    RESET_PWD_F,                    //重置密码失败
    FIND_INFO,                      //查询个人信息
    SEND_IMG,                       //发送图片
    SEND_MOVE,                      //发送抖动
    MEDIA_REQUEST,                  //视频请求
    MEDIA_REQUEST_AGREE,            //视频请求同意
    MEDIA_REQUEST_REFUSE,           //视频请求拒绝
    REQUEST_OFFLINELOG,             //请求离线记录
    REG_GROUP,                      //注册群聊
    REG_GROUP_S,                    //注册群聊成功
    REG_GROUP_F,                    //注册群聊失败
    GROUP_MSG,                      //群聊消息
    GROUP_FILE,                     //传输文件
    GROUP_FILE2,                    //文件传输完毕
    GROUP_FILE3,                    //文件传输开始
    GROUP_FILE4,                    //文件传输失败
    GROUP_ADDPERSON,                //邀请群成员
    LOAD_GROUP_PERSON,              //加载群成员
    GROUP_NOTIFY,                   //群公告消息
    LOAD_GROUP_RECORD,              //获取聊天记录
};


enum MsgType{
    CONNECTED,
    LOGINF,
    LOGINS,
    REGISTERS,
    REGISTERF,
    ANSERS,
    ANSERF,
    RESETPWDS,
};

typedef unsigned int uint;

struct PDU{
    uint maxSize;        //数据包大小
    uint msgType;        //消息类型(例如是发消息还是加好友)
    uint dataSize;       //数据大小
    char friendId[30];  //用于接收朋友的id
    char data[255];     //额外数据
};

struct userInfo
{
    char name[20];
    char pwd[20];
    int online;//0为离线  1为在线
};

struct UserInfo
{
    UserInfo():id(""),nickname(""),sex(""),age(""),headurl(""),persig(""),birthday(""),star(""),address(""),phone(""),praise(""),rubric(""),zodiac(""){}
    QString id;
    QString nickname;
    QString sex;
    QString age;
    QString headurl;
    QString persig;
    QString birthday;
    QString star;
    QString address;
    QString phone;
    QString praise;
    QString rubric;
    QString zodiac;
    int online;
};

struct groupinfo//存储用户的群
{
    char gname[40];
    char gid[20];
    char ghead[255];
    char gnotify[1024];
    char gfile[255];
    char gperson[255];
    char gimg[255];
};

struct GroupInfo
{
    GroupInfo():id(""),nickname(""),headurl(""),perNums(""){}
    QString id;
    QString nickname;
    QString headurl;
    QString perNums;
};

PDU* makePDU(int dataSize);//生成一个数据包
#endif // MYPDU_H
